home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 361_01 / chopper.c < prev    next >
Text File  |  1991-09-18  |  2KB  |  70 lines

  1.  
  2. /* CHOPPER ---> Crops a Byte Stream into 76 CHR$ Lines
  3.  *
  4.  * J.Ekwall 14 August 89
  5.  *
  6.  * Copyrighted to the Public Domain.  Unlimited Distribution Authorized.
  7.  *
  8.  * Last Update: 12 December 89/EK
  9.  */
  10.  
  11. #include <stdio.h>
  12. #include <io.h>
  13. #include <stdek.h>
  14.  
  15. /* Declare Globals */
  16. FILE *fp = stdin;
  17.  
  18. /* Declare ProtoTypes */
  19. void Usage(void);
  20.  
  21. main (int argc, char *argv[])
  22. {
  23.     int c, CleanUp = FALSE, Tally;
  24.     char Name[80], Text[80], *tp1;
  25.  
  26.  /* Open Specified File (If Any) */
  27.     if (argc > 2) Usage();
  28.     if (argc IS 2)
  29.        if (*argv[1] IS '$') {
  30.           strcpy(Name,"\\STD "); strcat(Name,++argv[1]);
  31.           if ((fp = fopen(Name,"r")) IS NULL) { perror(Name); exit(1); }
  32.           CleanUp = TRUE;
  33.        } else {
  34.           strcpy(Name,argv[1]);
  35.           if ((fp = fopen(Name,"r")) IS NULL) { perror(Name); Usage(); }
  36.           CleanUp = FALSE;
  37.        }
  38.  
  39.  /* Check for Pipe on Stdin or Specified File */
  40.     if (!INFLOW_EXISTS && (fp IS stdin)) Usage();
  41.  
  42.  /* Do Business */
  43.     for (tp1 = Text, Tally = 0; (c = getc(fp)) != EOF;) {
  44.        if (c IS NL) {
  45.           *tp1 = NULL; printf("%s\n",Text); tp1 = Text; Tally = 0; continue; }
  46.        *tp1++ = c;
  47.        if (Tally++ IS 77) {
  48.           c = getc(fp); ungetc(c,fp); if (c IS NL) continue;
  49.           for (*tp1 = NULL; *tp1 != SPACE; tp1--) if (--Tally IS 65) break;
  50.           if (*tp1 IS SPACE) {
  51.              *tp1++ = NULL; printf("%s \n",Text); strcpy(Text,tp1);
  52.           } else { printf("%s\n",Text); *Text = NULL; }
  53.           tp1 = Text + strlen(Text); Tally = strlen(Text) + 1;
  54.        }
  55.     }
  56.     *tp1 = NULL; if (*Text != NULL) printf("%s\n",Text);
  57.  
  58.  /* CleanUp & Split */
  59.     if (CleanUp IS TRUE) { fclose(fp); unlink(Name); }
  60. }
  61.  
  62. void Usage(void)
  63. {
  64.     fprintf(stderr, "\nUsage:\n");
  65.     fprintf(stderr,
  66.     "       CHOPPER [[drive:][path]filename]--> Hack Up Text into Lines.\n\n");
  67.     fprintf(stderr, "   $Pipes are Legal.\n\n");
  68.     exit(1);
  69. }
  70.